home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / ein / sources / cdpsrc.lzh / CDP / CDP.C next >
C/C++ Source or Header  |  1994-07-19  |  7KB  |  310 lines

  1. /*<Header>==============================================================
  2. *
  3. *    ébécâvâîü[âä / "CDP.C"
  4. *
  5. *        [ EIN(tm) project : âTâôâvâïâvâìâOâëâÇ ]
  6. *
  7. *    COPYRIGHT  Nam  1994, All rights reserved.
  8. *
  9. *    özòtüEægì₧üEëⁿò╧üEÅñùÿùpé╖é╫é─Ä⌐ùRüBé╜é╛é╡û│ò█Å╪é┴é╖
  10. *
  11. *-----------------------------------------------------------------------
  12. *    V1.0L01â┐    94.04.07/Nam    âvâìâgâ^âCâv
  13. *</Header>==============================================================*/
  14. #include    <stdio.h>
  15. #include    <stdlib.h>
  16. #include    <string.h>
  17. #include    <snd.h>
  18. #include    <winb.h>
  19. #include    <te.h>
  20. #include    <fntb.h>
  21. #include    <gui.h>
  22. #include    <egb.h>
  23. //#include    <file_dlg.h>
  24. //#include    <tifflib.h>
  25. #include    <msdos.cf>
  26. #include    <loader.h>
  27. #include    <math.h>
  28. #include    <io.h>
  29. #include    <guidbg.h>
  30. #include    <wgb.h>
  31. // üª é▒é▒é▄é┼é¬ò╜ï╧ôIé╔Ägùpé│éΩéΘâwâbâ_
  32. #include    <time.h>
  33. #include    <cdrfrb.h>
  34.  
  35. #include    "..\ein\eintm.h"    // EIN(TM)è╓ÿAâëâCâuâëâèé╠âwâbâ_
  36.  
  37.  
  38. #define    ERR_RETRY    (10)
  39. #define    STD_CD_NO    (0)
  40.  
  41. extern    int    updateCDdisp();
  42.  
  43. struct TIMEADRS    tracktime[100], disctime, endtime;
  44. int                cdtype     = -1;    // ïNô«Ä₧ëëætcheckùp
  45. int                starttrack = 0;
  46. int                endtrack   = 0;
  47. int                nowtrack   = 0;
  48. struct TIMEADRS    trtime, dctime;        // mphaseé┼ĵô╛
  49.  
  50. int    clearCDstat()
  51. {
  52.     register int    i;
  53.  
  54.     cdtype = -1;
  55.  
  56.     nowtrack = -2;
  57.     endtrack = -2;
  58.     for (i=0; i<100; i++){
  59.         tracktime[i].min=0;        // é▒éΩé═0âNâèâAé╡é╚éóé╞cdr_cdinfoé┼îδô«ì∞é╖éΘ(T-T)
  60.         tracktime[i].sec=0;
  61.     }
  62.     disctime.min=-2;
  63.     disctime.sec=-2;
  64.     trtime.min=-2;
  65.     trtime.sec=-2;
  66.     dctime.min=-2;
  67.     dctime.sec=-2;
  68.     
  69.     return NOERR;
  70. }
  71.  
  72. int    getPlayStatus()
  73. {
  74.     static int                stat;
  75.     register int    ret, retry;
  76.  
  77.     // âèâgâëâCùLéΦ
  78.     for ( retry=0; retry<ERR_RETRY; retry++){
  79.         ret = cdr_mphase( STD_CD_NO, &stat, &nowtrack, &trtime, &dctime);
  80.         if ( ret==0 ){
  81.             break;
  82.         }
  83.     }
  84.     // éαé╡âGâëü[é╚éτ-1é≡ò╘é╖
  85.     if ( ret!=0 ){
  86.         clearCDstat();
  87.         return -1;
  88.     }
  89.     // ÆΓÄ~Æåé╚éτ0é≡ò╘é╖
  90.     if ( stat==0 ){
  91.         nowtrack=0;
  92.         return stat;
  93.     }
  94.     // ëëætÆåé╚éτï╚ö╘ìåé≡ò╘é╖
  95.     return nowtrack;
  96. }
  97.  
  98. // CDé╠âXâeü[â^âXĵô╛
  99. int    readTOC()
  100. {
  101.     register int    ret, retry;
  102.  
  103.     //é▄é╕CDé≡Ä~é▀éµéñ
  104.     cdr_mstop( STD_CD_NO );
  105.     // âèâgâëâCùLéΦ
  106.     for ( retry=0; retry<ERR_RETRY; retry++){
  107.         ret = cdr_cdinfo( STD_CD_NO, &cdtype, &starttrack, &endtrack,
  108.                           &tracktime[0], &disctime );
  109.         if ( ret==0 ){
  110.             #ifdef DEBUG
  111.             printf("    error_retry(%d): cdr_cdinfo=%x\n", retry, ret);
  112.             #endif
  113.             break;
  114.         }
  115.     }
  116.     // ÅIù╣Ä₧è╘é═frame--
  117.     endtime = disctime;
  118.     if ( endtime.frame > 0 ){
  119.         endtime.frame--;
  120.     } else {
  121.         endtime.frame = 74;
  122.         if ( endtime.sec > 0 ){
  123.             endtime.sec--;
  124.         } else {
  125.             endtime.sec = 59;
  126.             endtime.min--;
  127.         }
  128.     }
  129.     #ifdef DEBUG
  130.     printf("### cdr_cdinfo: type:%d  start:%d, end:%d   (%2d.%2d.%2d)\n",
  131.             cdtype, starttrack, endtrack,
  132.             disctime.min, disctime.sec, disctime.frame);
  133.     #endif
  134.     /* ô╟é▌ĵéΦÄ₧é╔ERROR or âfü[â^é╠é▌é╠CD é╚éτé╬"Er"ò\Īé╔é╡é─ÅIù╣ */
  135.     if ( ret!=0 || cdtype==2 ){
  136.         updateCDdisp( 1 );
  137.         return NOERR;
  138.     }
  139.  
  140.     return NOERR;
  141. }
  142.  
  143. int    func_Play()
  144. {
  145.     register int    ret, i, retry;
  146.  
  147.     /* ëëætÅ≤æ╘é╠ĵô╛ */
  148.     ret = getPlayStatus();
  149.     // éαé╡ëëætÆåé╚éτ
  150.     if ( ret > 0 ){
  151.         // éαé╡ëëætÆåé╚éτÆΓÄ~
  152.         cdr_mstop( STD_CD_NO );
  153.         updateCDdisp( 1 );
  154.         clearCDstat();
  155.         return NOERR;
  156.     }
  157.     // éαé╡ÆΓÄ~Æåé╚éτCDé╠âXâeü[â^âXĵô╛
  158.     readTOC();
  159.     /* ì┼Åëé╠âIü[âfâBâIâgâëâbâNé≡ëëæt */
  160.     updateCDdisp( 1 );
  161.     for ( i=starttrack-1; i<endtrack; i++ ){
  162.         #ifdef DEBUG
  163.         printf("--> track %d: (%2d.%2d.%2d)-(%2d.%2d.%2d)\n", i,
  164.                 tracktime[i].min, tracktime[i].sec, tracktime[i].frame,
  165.                 endtime.min, endtime.sec, endtime.frame);
  166.         #endif
  167.         // âfü[â^âgâëâbâNé┼é╚é»éΩé╬ëëæt
  168.         if ( (tracktime[i].min & 0x80)==0 ){
  169.             // âèâgâëâCùLéΦ
  170.             for ( retry=0; retry<ERR_RETRY; retry++){
  171.                 ret = cdr_mtrplay( STD_CD_NO, &tracktime[i], &endtime, 0 );
  172.                 if ( ret==0 ){
  173.                     break;
  174.                 }
  175.                 #ifdef DEBUG
  176.                 printf("    error_retry(%d): cdr_mtrplay=%x\n", retry, ret);
  177.                 #endif
  178.             }
  179.             updateCDdisp( 1 );
  180.             break;
  181.         }
  182.     }
  183.  
  184.     return NOERR;
  185. }
  186.  
  187. int    func_Rev()
  188. {
  189.     register int    ret, i, retry;
  190.  
  191.     /* ëëætÅ≤æ╘é╠ĵô╛ */
  192.     ret = getPlayStatus();
  193.     // ïNô«Ä₧è∙é╔ëëæté╡é─éóéΘé╚éτ, é▄é╕TOCé≡ô╟é▌ì₧é▐
  194.     if ( cdtype<0 ){
  195.         readTOC();
  196.         if (nowtrack<1){
  197.             nowtrack=1;
  198.         }
  199.     } else {
  200.         // éαé╡ÆΓÄ~Æåé╚éτplay
  201.         if ( ret<1 ){
  202.             func_Play();
  203.             return NOERR;
  204.         }
  205.     }
  206.     /* âfü[â^é╠é▌é╠CD é╚éτé╬"Er"ò\Īé╔é╡é─ÅIù╣ */
  207.     if ( cdtype==2 ){
  208.         updateCDdisp( 1 );
  209.         return NOERR;
  210.     }
  211.     // éαé╡ëëætÆåé╚éτêΩÄ₧ÆΓÄ~
  212.     ret = cdr_pause( STD_CD_NO );
  213.     
  214.     /* æOé╠âIü[âfâBâIâgâëâbâNé≡ëëæt */
  215.     if ( (nowtrack > 1) && ((tracktime[starttrack].min & 0x80)==0) ){
  216.         i = nowtrack-1-1;
  217.     } else {
  218.         // î╗ì▌ê╩Æué¬èJÄnâgâëâbâNé┼èÄé┬âfü[â^âgâëâbâNé╚éτ
  219.         i = endtrack -1;
  220.     }
  221.     for ( ; i>=0; i-- ){
  222.         #ifdef DEBUG
  223.         printf("--> track %d: (%2d.%2d.%2d)-(%2d.%2d.%2d)\n", i,
  224.                 tracktime[i].min, tracktime[i].sec, tracktime[i].frame,
  225.                 endtime.min, endtime.sec, endtime.frame);
  226.         #endif
  227.         // âfü[â^âgâëâbâNé┼é╚é»éΩé╬ëëæt
  228.         if ( (tracktime[i].min & 0x80)==0 ){
  229.             // âèâgâëâCùLéΦ
  230.             for ( retry=0; retry<ERR_RETRY; retry++){
  231.                 ret = cdr_mtrplay( STD_CD_NO, &tracktime[i], &endtime, 0 );
  232.                 if ( ret==0 ){
  233.                     break;
  234.                 }
  235.                 #ifdef DEBUG
  236.                 printf("    error_retry(%d): cdr_mtrplay=%x\n", retry, ret);
  237.                 #endif
  238.             }
  239.             updateCDdisp( 1 );
  240.             break;
  241.         }
  242.     }
  243.     
  244.     return NOERR;
  245. }
  246.  
  247. int    func_FF()
  248. {
  249.     register int    ret, i, retry;
  250.  
  251.     /* ëëætÅ≤æ╘é╠ĵô╛ */
  252.     ret = getPlayStatus();
  253.     
  254.     // ïNô«Ä₧è∙é╔ëëæté╡é─éóéΘé╚éτ, é▄é╕TOCé≡ô╟é▌ì₧é▐
  255.     if ( cdtype<0 ){
  256.         readTOC();
  257.         if (nowtrack<1){
  258.             nowtrack=0;
  259.         }
  260.     } else {
  261.         // éαé╡ÆΓÄ~Æåé╚éτplay
  262.         if ( ret<1 ){
  263.             func_Play();
  264.             return NOERR;
  265.         }
  266.     }
  267.     /* âfü[â^é╠é▌é╠CD é╚éτé╬"Er"ò\Īé╔é╡é─ÅIù╣ */
  268.     if ( cdtype==2 ){
  269.         updateCDdisp( 1 );
  270.         return NOERR;
  271.     }
  272.     // éαé╡ëëætÆåé╚éτêΩÄ₧ÆΓÄ~
  273.     ret = cdr_pause( STD_CD_NO );
  274.     #ifdef DEBUG
  275.     printf("--> track %d    endtrack:%d\n", nowtrack, endtrack);
  276.     #endif
  277.     /* Äƒé╠âIü[âfâBâIâgâëâbâNé≡ëëæt */
  278.     if ( (nowtrack < endtrack) && ((tracktime[endtrack].min & 0x80)==0) ){
  279.         i = nowtrack-1+1;
  280.     } else {
  281.         // î╗ì▌ê╩Æué¬ì┼ÅIâgâëâbâNé┼èÄé┬âfü[â^âgâëâbâNé╚éτ
  282.         i = starttrack -1;
  283.     }
  284.     for ( ; i<endtrack; i++ ){
  285.         #ifdef DEBUG
  286.         printf("--> track %d: (%2d.%2d.%2d)-(%2d.%2d.%2d)\n", i,
  287.                 tracktime[i].min, tracktime[i].sec, tracktime[i].frame,
  288.                 endtime.min, endtime.sec, endtime.frame);
  289.         #endif
  290.         // âfü[â^âgâëâbâNé┼é╚é»éΩé╬ëëæt
  291.         if ( (tracktime[i].min & 0x80)==0 ){
  292.             // âèâgâëâCùLéΦ
  293.             for ( retry=0; retry<ERR_RETRY; retry++){
  294.                 ret = cdr_mtrplay( STD_CD_NO, &tracktime[i], &endtime, 0 );
  295.                 if ( ret==0 ){
  296.                     break;
  297.                 }
  298.                 #ifdef DEBUG
  299.                 printf("    error_retry(%d): cdr_mtrplay=%x\n", retry, ret);
  300.                 #endif
  301.             }
  302.             updateCDdisp( 1 );
  303.             break;
  304.         }
  305.     }
  306.     
  307.     return NOERR;
  308. }
  309.  
  310.